/**
 * Created by Administrator on 2016/12/9.
 */
/**
 * 角色 变量
 */
var ctx;
//var bullet={
//    bPos:{
//        x:rnd(0,590),
//        y:rnd(0,470)
//    },
//    bSpeed:rnd(1,5),
//    bColor:rndColor(10,256),
//    bSize:10
//};//子弹对象
var bullets = [];//子弹群 对象数组
var timer;//定时刷新子弹位置
var liveBullets;
var X = 0;//横坐标
var Y = 0;//纵坐标
var endX = 0;
var endY = 0;
var thePos = [X, Y];//子弹最终出现位置

var isGameover = false;
var isOngamePan = false;
var mouseX, mouseY;//鼠标指针坐标

var LEVEL = 1;//速度等级
var Tick = 0;//计时器，提升速度的依据

var gameTime;
var startTime = new Date().getTime();
/**************************************************************************/



/**************************************************************************/
/**
 * 复用 方法
 */
//生成随机数
function rnd(n, m) {
    return Math.floor(Math.random() * (m - n) + n);
}

//生成随机颜色
function rndColor(n, m) {
    n = n || 0;
    m = m || 256;
    return 'rgb(' + rnd(n, m) + ',' + rnd(n, m) + ',' + rnd(n, m) + ')';
}


//方向判断
function getFX(fx) {
    switch (fx) {
        case 1: return callTop(); break;
        case 2: return callRight(); break;
        case 3: return callBottom(); break;
        case 4: return callLeft(); break;
    }
    //var direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4; 返回数据 ,0,1,2,3
}

var callTop = function () {
    X = rnd(0, 590);//横坐标
    Y = 0;//纵坐标
    endX = rnd(0, 590);//目的地 横坐标
    endY = 470;//目的地 横坐标
    thePos = [X, Y, endX, endY, 1];//起始位置X，起始位置Y，终点位置endX，终点位置endY
    return thePos;
}

var callRight = function () {
    X = 590;//横坐标
    Y = rnd(0, 470);//纵坐标
    endX = 0;//目的地 横坐标
    endY = rnd(0, 470);//目的地 横坐标
    thePos = [X, Y, endX, endY, 2];//起始位置X，起始位置Y，终点位置endX，终点位置endY
    return thePos;
}

var callBottom = function () {
    X = rnd(0, 590);//横坐标
    Y = 470;//纵坐标
    endX = rnd(0, 590);//目的地 横坐标
    endY = 0;//目的地 横坐标
    thePos = [X, Y, endX, endY, 3];//起始位置X，起始位置Y，终点位置endX，终点位置endY
    return thePos;
}

var callLeft = function () {
    X = 0;//横坐标
    Y = rnd(0, 470);//纵坐标
    endX = 590;//目的地 横坐标
    endY = rnd(0, 470);//目的地 横坐标
    thePos = [X, Y, endX, endY, 4];//起始位置X，起始位置Y，终点位置endX，终点位置endY
    return thePos;
}

//更新鼠标坐标
var updateMousePos = function () {
    $("#myCanvas").mousemove(function (e) {
        isOngamePan = true;
        console.log(isOngamePan, isGameover);
        mouseX = e.clientX - $(this).offset().left;
        mouseY = e.clientY - $(this).offset().top;
        //console.log("鼠标坐标",mouseX,mouseY,$(this).offset().left,$(this).offset().top);
    })
    $("#myCanvas").mouseout(function () {
        isOngamePan = false;
    })
}

/**************************************************************************/
/**
 * 核心 事件
 */


//开始 游戏
var startGame = function () {
    initCanvas();
    creBullet(10);//生产子弹原型:参数 （属性，数量）
    drawBullet(bullets);//绘制子弹
    bMove();
    updateMousePos();
    console.log(bullets)
}
/**************************************************************************/
//初始化 画布
var initCanvas = function () {
    var myCanvas = document.getElementById("myCanvas");
    ctx = myCanvas.getContext("2d");
}


/**************************************************************************/
//生产 子弹 :参数：数量；
var creBullet = function (num) {
    for (var i = 0; i < num; i++) {
        //工厂模式创建子弹原型
        var bullet = new Object();
        var bPosArr = getFX(rnd(1, 5));//子弹出现时的方向
        bullet.x = bPosArr[0];//横坐标
        bullet.y = bPosArr[1];//纵坐标
        bullet.endX = bPosArr[2];//终点x
        bullet.endY = bPosArr[3];//终点y
        bullet.diff = bPosArr[4];//最终判断条件，是起始减终点还是终点减起始
        bullet.bSpeed = LEVEL;//飞行速度
        bullet.bColor = rndColor(10, 256);//子弹外观
        bullet.bSize = 10;//子弹尺寸

        bullets.push(bullet);//新子弹对象存入子弹夹
    }
}


/**************************************************************************/
//绘制 子弹
var drawBullet = function (bullets) {
    let img = document.createElement('img')
    img.style.height = '10px';
    img.style.width = '10px';
    for (let i = 0; i < bullets.length; i++) {
        // if (i % 2 == 0) {
        //     img.src = `/public/img/${rnd(1, 3)}.png`;//
        //     img.onload = () => {
        //         ctx.drawImage(img, bullets[i].x, bullets[i].y, bullets[i].bSize * 3, bullets[i].bSize * 3);
        //     }
        // } else {
        //     ctx.fillStyle = bullets[i].bColor;
        //     ctx.fillRect(bullets[i].x, bullets[i].y, bullets[i].bSize, bullets[i].bSize);
        // }
        ctx.fillStyle = bullets[i].bColor;
        ctx.fillRect(bullets[i].x, bullets[i].y, bullets[i].bSize, bullets[i].bSize);
    }
}


//window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
//启动 计时器
//timer=requestAnimationFrame(animate);


/**************************************************************************/
//子弹移动
var bMove = function () {
    timer = setInterval(animate, 10 * LEVEL);

}


/**************************************************************************/
//var baseTime=new Date().getTime();
//子弹动作判断与初始化
var animate = function () {
    if (isOngamePan && !isGameover) {
        drawTimer();
    }
    Tick += 1;
    if (Tick % (10000 / 10 * LEVEL) == 0) {
        LEVEL += 0.5;
        creBullet(2);//增加五发子弹
        console.log(bullets.length, Tick % (10000 / 10 * LEVEL));
    }
    var t = new Date().getTime();
    for (var i = 0; i < bullets.length; i++) {
        switch (bullets[i].diff) {
            case 1:
                if (bullets[i].y < bullets[i].endY) {
                    bullets[i].y += bullets[i].bSpeed;
                }
                bullets[i].x < bullets[i].endX ? bullets[i].x += bullets[i].bSpeed : bullets[i].x -= bullets[i].bSpeed;
                break;
            case 2:
                if (bullets[i].x > bullets[i].endX) {
                    bullets[i].x -= bullets[i].bSpeed;
                }
                bullets[i].y < bullets[i].endY ? bullets[i].y += bullets[i].bSpeed : bullets[i].y -= bullets[i].bSpeed;
                break;
            case 3:
                if (bullets[i].y > bullets[i].endY) {
                    bullets[i].y -= bullets[i].bSpeed;
                }
                bullets[i].x < bullets[i].endX ? bullets[i].x += bullets[i].bSpeed : bullets[i].x -= bullets[i].bSpeed;
                break;
            case 4:
                if (bullets[i].x < bullets[i].endX) {
                    bullets[i].x += bullets[i].bSpeed;
                }
                bullets[i].y < bullets[i].endY ? bullets[i].y += bullets[i].bSpeed : bullets[i].y -= bullets[i].bSpeed;
                break;
        }

        if (bullets[i].x <= 0 || bullets[i].y <= 0 || bullets[i].x >= 590 || bullets[i].y >= 470) {
            bullets.splice(i, 1);//如果该子弹到达边界，则从弹夹剔除，
            creBullet(1);//并重新生成一个子弹填充到弹夹里
        }

        if ((bullets[i].x >= mouseX - 14 && bullets[i].x <= mouseX + 14) && (bullets[i].y >= mouseY - 14 && bullets[i].y <= mouseY + 14)) {
            console.log(bullets[i].x, bullets[i].y);
            console.log(mouseX, mouseY);

            gameover(gameTime);
        }
    }
    ctx.clearRect(0, 0, 600, 480);
    drawBullet(bullets);
}

/**************************************************************************/
//绘制 时间
function drawTimer() {
    var t = new Date().getTime() - startTime;

    var m = parseInt(t / (1000 * 60));
    var s = parseInt((t / 1000) % 60);
    var ms = t % 1000;

    gameTime = m + ':' + s + ':' + ms;
    $("#playTime").text(gameTime);
    //ctx.font=15+'px sans-serif';
    //
    //var w=ctx.measureText(str).width;
    //ctx.fillStyle='#FFF';
    //ctx.fillText(str,10,90);
}

/**************************************************************************/
//继续游戏
var reStartGame = function () {
    timer = setInterval(animate, 20);
}

/**************************************************************************/
//停止 计时器
//cancelAnimationFrame(timer);
var stop = function () {
    clearInterval(timer);
}

//游戏 结束
var gameover = function (gameTime) {
    isGameover = true;
    stop();
    ctx.clearRect(0, 0, 600, 480);
    alert("Game over!游戏时间：" + gameTime);
}

//重载游戏
var gameReload = function () {
    window.location.reload();
    $("#btn_game_begin").trigger("click");
}

$("#btn_game_begin").on("click", function () {
    startGame();
})
/**************************************************************************/

/**************************************************************************/